package com.cykj.eurekaclient.utils;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.IOException;
import java.io.InputStream;

public class FtpTool {
    /* ftp服务器ip地址 */
    private static final String FTP_ADDRESS = "120.77.43.188";
    /* 端口号 */
    private static final Integer FTP_PORT = 21;
    /* 登录账号 */
    private static final String FTP_USER_NAME = "vsftpd";
    /* 登录密码 */
    private static final String FTP_PASSWORD = "vsftpd";
    /* 图片文件存储的根路径 */
    private static final String FTP_PATH = "/var/public_root/";

    /**
     * 使用ftp进行图片上传，上传至云服务器
     * 再利用nginx获取图片
     * */
    public static String updateImage(String fileName, String fileSuffix, InputStream inputStream){
        String imageName = fileName+"."+fileSuffix;
        FTPClient ftpClient = new FTPClient();
        ftpClient.enterLocalPassiveMode();// 设置允许被动连接，访问远程ftp时
        try {
            // 连接ftp服务器
            ftpClient.connect(FTP_ADDRESS,FTP_PORT);
            boolean bool = ftpClient.login(FTP_USER_NAME,FTP_PASSWORD);
            // 上传至指定路径
            ftpClient.changeWorkingDirectory(FTP_PATH);
            // 设置二进制
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
                ftpClient.disconnect();// 连接失败，断开连接
                return "-1";
            }
            long startTimeMillis = System.currentTimeMillis();

            // 可以利用转码设置文件名为中文名：ftpClient.storeFile(new String(imageName.getBytes("GBK"),"iso-8859-1"),inputStream);
            boolean bool2 = ftpClient.storeFile(imageName,inputStream);
            if (bool&&bool2){
                long endTimeMillis = System.currentTimeMillis();
                System.out.println(String.format("文件：%s上传成功，耗时：%d毫秒！",imageName,(endTimeMillis-startTimeMillis)));
                /* 返回上传的文件名 */
                return imageName;
            }else {
                return "-2";
            }

        }catch (IOException e){
            e.printStackTrace();
            System.out.println("图片保存ERROR: "+e.getMessage());
            return "-3";
        }
        finally {
            // 关闭资源
            try {
                if (inputStream != null){
                    inputStream.close();
                }
                // 退出登录
                ftpClient.logout();
                // 断开与ftp的连接
                ftpClient.disconnect();
            }catch (IOException e){
                System.out.println("关闭资源ERROR: "+e.getMessage());
            }
        }
    }
}
